#ifndef COMPILEVISITOR_H
#define COMPILEVISITOR_H

//#include "Ast.h"

class AstNodeForStatement;
class AstNodeAssignment;
class AstNodeIfStatement;
class AstNodePrintLiteral;
class AstNodePrintExpression;
class AstNodeExpressionVariable;
class AstNodeBooleanOperator;
class AstNodeDoubleConstant;
class AstNodeBinaryOperator;
class AstNodeCompareExpression;
class AstNodeLiteral;
class AstNodeStatementList;
class AstNodeLValue;

class CompileVisitor 
{
  public:

    virtual int finalize()=0;

    //---------------------------------------------
    virtual int compile(AstNodeLiteral *)=0;
    virtual int compile(AstNodeStatementList *)=0;
    virtual int compile(AstNodeLValue*)=0;
    virtual int compile(AstNodeBooleanOperator *)=0;
    virtual int compile(AstNodeAssignment *)=0;
    virtual int compile(AstNodeExpressionVariable *)=0;
    virtual int compile(AstNodeDoubleConstant *)=0;
    virtual int compile(AstNodeBinaryOperator *)=0;
    virtual int compile(AstNodeCompareExpression *)=0;
    virtual int compile(AstNodeForStatement *)=0;
    virtual int compile(AstNodeIfStatement *)=0;
    virtual int compile(AstNodePrintLiteral *)=0;
    virtual int compile(AstNodePrintExpression *)=0;
#if 0
AstNodeFuncDefStatement.h:class AstNodeFuncDefParm : public AstNode
AstNodeFuncDefStatement.h:class AstNodeFuncDefParmList : public AstNode
AstNodeFuncDefStatement.h:class AstNodeFuncDefStatement : public AstNode 
#endif
};

#endif 
